package annotation.test1;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//串讲步骤1: 创建注解 AnnotationForStudy (用来学习的注解)
/**
 * @author 甘赵辉
 * @date 2023/2/28
 * @Purpose(目的)  学习创建注解( 元注解-> 注解壳子 -> 注解元素)
 *          注解元素 的格式:
 *             类型 元素名();
 *                 类型: 可以是基本类型或引用类型(一般枚举居多)
 *                      枚举支持:
 *                          单值形式: 注解(值1) , eg: @Target(ElementType.TYPE)
 *                          多值形式: 注解({值1,值2}) , eg: @Target({ElementType.TYPE,ElementType.METHOD})
 *
 *@Since  jdk1.5(1.5)
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationForStudy {
    // ip()理解为变量ip
    String ip();
    // default 3306表示port默认值
    int port() default 3306;
    String database();
    /*
    Encoding 是枚举类型,
        使用格式: value=Encoding.枚举元素,
        如果此注解只有当前的value元素, 则使用时value=可以省略,
            eg: @Target(ElementType.TYPE)  -- 枚举单值形式
            eg: @Target({ElementType.TYPE,ElementType.METHOD}) --枚举多值形式
     */
    Encoding[] value();
    String loginName();
    String password();
}
